Guide d’introduction à l’utilisation de RStudio

Alexandre Michel 2022-08-19

CONFIGURATION

Installation et activation des packages

Voici comment installer et activer le https://github.com/Michaud2/Package-R-EPA[package personnalisé] que j’ai créé en parallèle à ce guide :

install.packages("devtools")
library("devtools")
install_github("Michaud2/Package-R-EPA")
library("EPA")

IMPORTATION D’UNE BASE DE DONNÉES

L’importation d’une base de données se fait de la manière la plus facile à l’aide de la fonction Importer() qui provient du package personnalisé. La fonction vous guide dans l’importation de la base en posant quelques questions simples à répondre directement dans la console.

Pour suivre les exemples qui seront présentés dans ce guide, vous pouvez importer la base de données en format .csv qui est hébergée sur ce lien en le copiant et en le collant (SANS GUILLEMETS) lorsque ce sera demandé : https://dimension.usherbrooke.ca/donnees/base2015CES.csv

base = Importer()

MANIPULATIONS SUR UNE BASE DE DONNÉES

Visualiser et explorer une base de données

Dans une base de données, chaque colonne devrait être une variable (ou champ) et chaque rangée devrait être une observation (ou unité d’analyse). Certaines bases ne sont pas naturellement structurées de cette manière, nous verrons quelques manipulations qui permettent de bien formater une base de données dans cette section.

Pour l’instant, il est possible de la faire apparaître en exécutant uniquement le nom de la base de données ou bien en cliquant sur son nom dans la fenêtre « Environment » de RStudio qui se situe en haut à droite.

On observe alors que notre base de données d’exemple possède 43 variables (colonnes) et 7572 observations (rangées). On peut aussi oberser le « type » de chaque variable, son format d’encodage, juste en dessous de son nom. Voici les différents types de variables possibles :

base

C’est à cette étape qu’on doit bien comprendre les deux éléments centraux d’une base de données : les observations et les variables.

Observations

Il est important de bien comprendre ce que chaque observation (rangée) signifie ou représente puisqu’il s’agit là de l’unité d’analyse de la base de données. Les données concernent-elles des individus, des agrégats comme des pays, des évènements, etc ?

Variables

Il est aussi primordial de comprendre de quoi est constituée chaque colonne de la base de données. Chaque colonne étant une variable, elle est mesurée par un indicateur précis qui n’est parfois pas codé de manière intuitive. C’est pourquoi il est nécessaire de ce référer constamment au codebook relié à la base de données. Il s’agit de notre bible lorsque l’on travaille avec des données complexes. Chaque base de données devrait venir avec un codebook lors de son téléchargement pour être capable de bien la lire.

Renommer des variables (colonnes)

On peut renommer des colonnes précises à l’aide de la fonction Renommer() qui fait partie du package personnalisé. On renomme ici les variables “age” et “p.aborig” pour “an_naissance” et “autochtone”

base = Renommer(base, c("age", "p.aborig"), c("an_naissance", "autochtone"))

Recoder les valeurs d’une variable

On peut recoder une variable de deux manières : avec la fonction recode() ou par des conditions.

La fonction recode() du package car

La fonction recode() possède deux arguments : l’appel à la variable puis les modifications à apporter. Chaque nouvelle valeur est séparée par un point-virgule (;) alors que chaque modification a la structure suivante : ancienne(s)_valeur(s) = nouvelle_valeur. On peut attribuer la même nouvelle valeur à plusieurs anciennes valeurs, comme c’est le cas ici, en enveloppant les anciennes valeurs avec la fonction c(). Toutes ces modifications doivent se trouver entre deux guillemets, comme vous pouvez l’observer.

On recode ici la variable “autochtone” nouvellement renommée pour en faire une dichotomique (OUI ou NON) plutôt qu’avoir l’appartenance à chaque groupe. À noter que l’on doit nécessairement préciser le package d’où provient la fonction en ajoutant “car::” devant son nom puisqu’elle entre en conflit avec une fonction du même nom du package dplyr.

base$autochtone = recode(base$autochtone, '1=0 ; c(2,3,4,5,6)=1 ; else=NA')

Une ou plusieurs conditions

La condition se lit comme suit : l’année de naissance sera maintenant égale à NA lorsque celle-ci a la valeur 1000. La variable dont les valeurs sont modifiées se trouve avant les crochets [] et la variable sur laquelle la condition est testée se trouve à l’intérieur des crochets, avec la condition (constituée d’un opérateur logique et d’une valeur à tester). La nouvelle valeur attribuée à la variable lorsque la condition est vraie se trouve après le égal = à la toute fin, ici NA.

On recode ici les variables “an_naissance” et “income” afin d’en retirer les valeurs indésirables.

base$an_naissance[base$an_naissance == 1000] = NA

base$income[base$income < 1000 | base$income > 1000000] = NA

Créer une nouvelle variable

La création d’une variable se produit lorsque l’on attribue la valeur d’une variable à un nouveau nom qui n’existe pas encore. On peut créer une nouvelle variable à l’aide d’une simple opération mathématique ou par une condition plus complexe.

Par la fonction recode

Si le résultat de la fonction recode() est sauvegardé dans une variable qui n’existe pas encore, une nouvelle variable sera crée dans la base de données.

base$a_vote = recode(base$p.voted, '1="Oui" ; 2="Non" ; else=NA')

Par une opération mathématique

On peut effectuer une simple opération mathématique sur toutes les valeurs d’une variable et sauvegarder le résultat dans une nouvelle variable.

On crée ici la nouvelle variable “age” en soustrayant l’année de réponse au questionnaire (2015) et l’année de naissance de la personne.

base$age = 2015 - as.numeric(base$an_naissance)

Par une ou plusieurs conditions

Le processus est exactement le même que pour le recodage des valeurs par une condition, mais on sauvegarde le résultat dans une nouvelle variable plutôt qu’en écraser une déjà existante.

base$agecat = base$age
base$agecat[base$agecat >= 18 & base$agecat < 40] = 1
base$agecat[base$agecat >= 40 & base$agecat < 60] = 2
base$agecat[base$agecat >= 60] = 3

Filtrer une base de données

On peut filtrer une base de données selon deux objectifs : conserver seulement certaines variables (colonnes) ou seulement certaines observations (rangées).

Conserver seulement certaines variables (colonnes)

En utilisant la fonction subset(), on peut appeler l’argument “select” afin de conserver des variables en fonction de leur nom.

base2 = select(base, sex.r, age, agecat, p.intpol, a_vote, income)
base2

Conserver seulement certaines observations (rangées)

On peut aussi utiliser la fonction subset() pour conserver des observations (rangées) en fonction d’une condition. On peut alors créer une base de données qui ne contient que des femmes de la manière suivante :

base_femmes = filter(base, sex.r == 2)
base_femmes

L’ANALYSE UNIVARIÉE

Variable qualitative

La fonction SommaireQuali() du package personnalisé permet d’afficher le mode et les fréquences des valeurs, ce qui offre un aperçu très clair de la distribution avec laquelle on travaille. Cette fonction est nécessaire afin de bien comprendre les données avec lesquelles on travaille et les caractéristiques d’une distribution. N’hésitez pas à l’utiliser à outrance.

Par défaut, le second argument “na.rm” a la valeur “TRUE”, ce qui permet de ne pas considérer les NA dans l’équation. Si vous désirez considérer les NA, vous pouvez inscrire “na.rm = FALSE”.

freq_vote = SommaireQuali(base$a_vote)
## 
## Fréquences des valeurs de la variables :
## 
##        n    % val%
## Non  271 12.2 12.2
## Oui 1946 87.8 87.8
## 
## [1] Mode : Oui

Variable quantitative

Suivant le même principe que pour une variable qualitative, la fonction SommaireQuanti() du package personnalisé permet d’obtenir les informations importantes à la description d’une distribution, mais cette fois-ci pour une variable quantitative. Cette fonction ressort une liste de trois objets (moyenne, médiane et écart-type) qui peuvent ensuite être accéder individuellement.

Tout comme pour la fonction précédente, le second argument “na.rm” a la valeur “TRUE” par défaut, ce qui permet de ne pas considérer les NA dans l’équation. Si vous désirez considérer les NA, vous pouvez inscrire “na.rm = FALSE”.

income_sommaire = SommaireQuanti(base$income)
## 
## [1] Moyenne : 66234.21 
## [1] Ecart-type : 67207.38    
## 
## [1] Minimum (0%) : 1000          
## [1] Premier quartile (25%) : 30000                   
## [1] Mediane (50%) : 52000          
## [1] Dernier quartile (75%) : 82000                   
## [1] Maximum (100%) : 1000000
income_sommaire$moyenne
income_sommaire$mediane
income_sommaire$ecart_type

ANALYSE BIVARIÉE

L’analyse bivariée contient au moins quatre étapes cruciales pour bien être exécutée : le recodage des variables, la mesure de significativité (p < 0.05), la mesure de la taille de l’effet et la présentation visuelle des données. Les étapes nécessaires au recodage des variables ont déjà été exposées précédemment dans ce guide. La présentation visuelle des données se fera à partir du Grammar of Graphics utilisé par le package ggplot2.

Pour tous les types de croisement, les étapes à suivre seront donc les mêmes :

  1. Recodage des variables
  2. Test de significativité (p < 0.05)
  3. Mesure de taille de l’effet
  4. Présentation visuelle des données croisées

Voici maintenat un tableau qui présente les différentes mesures de taille de l’effet et les bornes qui permettent de déterminer la force de la relation entre les deux variables. Ces bornes sont présentées pour les trois types de croisements principalement utilisés en science politique :

  1. Croisement entre deux variables qualitatives (catégorielles) ;
  2. croisement entre une variable qualitative et une variable quantitative ;
  3. croisement entre deux variables quantitatives.

Mesures de taille de l’effet et leurs bornes associées

*À noter ici que le tableau présente quatre type de croisement puisque le type de croisement qualitative-qualitative utilisera des mesures de taille de l’effet différentes selon si la variable qualitative est dichotomique (seulement deux valeurs possibles [1,0]) ou polytomique (plus de deux valeurs possibles [1,2,3,4…])

Type de croisement Mesure de taille de l’effet Petite Moyenne Grande
Quali + Quali V de Cramer 0.1 0.3 0.5
Quali (dicho) + Quanti D de Cohen 0.2 0.5 0.8
Quali (poly) + Quanti tau de Kendall (-) 0.1 (-) 0.3 (-) 0.5
Quanti + Quanti r de Pearson (-) 0.1 (-) 0.3 (-) 0.5

Deux variables qualitatives

Recodage

Dans cet exemple, nous utiliserons les variables “sex.r” et “p.voted” pour vérifier s’il y a un lien entre le sexe et l’abstention électorale.

Avant de croiser ces deux variables, on se doit de vérifier leurs valeurs afin de voir s’il faut procéder à un recodage. On peut vérifier leurs valeurs selon les méthodes présentées à la section « Analyse univariée ».

freq_sexe = SommaireQuali(base$sex.r, na.rm = FALSE)
## 
## Fréquences des valeurs de la variables :
## 
##         n    % val%
## 1    3635 48.0 48.2
## 2    3883 51.3 51.5
## 3      16  0.2  0.2
## 1000    6  0.1  0.1
## NA     32  0.4   NA
## 
## [1] Mode : 2
freq_vote = SommaireQuali(base$p.voted, na.rm = FALSE)
## 
## Fréquences des valeurs de la variables :
## 
##         n    % val%
## 1    1946 25.7 86.3
## 2     271  3.6 12.0
## 3       5  0.1  0.2
## 4      19  0.3  0.8
## 1000   14  0.2  0.6
## NA   5317 70.2   NA
## 
## [1] Mode : NA's
base$sexe = recode(base$sex.r, '1="Homme" ; 2="Femme" ; else=NA')
base$a_vote = recode(base$p.voted, '1="Oui" ; 2="Non" ; else=NA')

Après ces manipulation, la variable “a_vote” prend les valeurs “Oui” ou “Non”, alors que la variable “sexe” prend les valeurs “Homme” ou “Femme”.

Significativité et taille de l’effet

La fonction QualiQuali() du package personnalisé permet de calculer la valeur du p, la valeur du V de Cramer (mesure de taille de l’effet associée à ce type de croisement) et de présenter les données visuellement sur un tableau croisé.

La fonction renvoie une liste qui contient la valeur du p et le V de Cramer. Cette liste peut être sauvegardé dans un nouvelle objet et on peut ensuite accéder aux deux valeurs à l’aide du signe de dollar ($).

p_V_sexe_vote = QualiQuali(base$sexe, base$a_vote)
## 
## Tableau de contingence (% de colonnes) : 
## 
##    Cell Contents
## |-------------------------|
## |                   Count |
## |          Column Percent |
## |-------------------------|
## 
## Total Observations in Table:  2212 
## 
##              | sexe 
##       a_vote |    Femme  |    Homme  | Row Total | 
## -------------|-----------|-----------|-----------|
##          Non |      145  |      124  |      269  | 
##              |   12.719% |   11.567% |           | 
## -------------|-----------|-----------|-----------|
##          Oui |      995  |      948  |     1943  | 
##              |   87.281% |   88.433% |           | 
## -------------|-----------|-----------|-----------|
## Column Total |     1140  |     1072  |     2212  | 
##              |   51.537% |   48.463% |           | 
## -------------|-----------|-----------|-----------|
## 
##  
## 
## [1] Valeur du p : 0.445170445072869
## 
## [1] Le croisement entre la variable « sexe » et la variable « a_vote » n'est pas statistiquement significatif. Il n'y a donc pas de relation entre les deux variables.
p = p_V_sexe_vote$p_value
p
## [1] 0.4451704
v = p_V_sexe_vote$V_Cramer
v
## [1] 0

Présentation visuelle

Deux variables qualitatives à analyser peuvent être croisées à l’aide d’un tableau de contingence (ou tableau croisé). Ce tableau de contingence est composé de cellules qui contiennent chacune un nombre d’observations associées à une valeur de Y ET à une valeur de X.

Pour avoir une plus grande pertinence analytique, ce nombre d’observation est généralement présenté en pourcentage, prenant comme total une valeur possible de la variable en colonnes ou une de la variable en rangées, selon la position de la variable de groupement (la variable indépendante)

  1. Il faut d’abord différencier les deux variables que nous traitons et ce qu’elles représentent.
  2. Il faut ensuite observer le tableau croisé et déterminer si la variable de groupement (variable indépendante) est placée en colonnes ou en rangées.

Ce tableau de contingence a été produit automatiquement par la fonction précédente. Pour les présenter de manière esthétiquement appropriée pour votre rendu, il ne suffit qu’à créer un tableau manuellement dans Excel ou dans Word à partir des chiffres du tableau brut de RStudio.

Pour reproduire manuellement le même tableau et le personnaliser d’avantage, il est possible d’utiliser directement la fonction CrossTable().

CrossTable(base$a_vote, base$sexe,
           prop.c = TRUE,
           prop.r = FALSE,
           prop.t=FALSE,
           prop.chisq=FALSE,
           format = "SPSS")
## 
##    Cell Contents
## |-------------------------|
## |                   Count |
## |          Column Percent |
## |-------------------------|
## 
## Total Observations in Table:  2212 
## 
##              | base$sexe 
##  base$a_vote |    Femme  |    Homme  | Row Total | 
## -------------|-----------|-----------|-----------|
##          Non |      145  |      124  |      269  | 
##              |   12.719% |   11.567% |           | 
## -------------|-----------|-----------|-----------|
##          Oui |      995  |      948  |     1943  | 
##              |   87.281% |   88.433% |           | 
## -------------|-----------|-----------|-----------|
## Column Total |     1140  |     1072  |     2212  | 
##              |   51.537% |   48.463% |           | 
## -------------|-----------|-----------|-----------|
## 
## 

Il est aussi possible de présenter graphiquement les données d’un tableau croisé, bien que cette méthode de présentation ne soit pas toujours la plus appropriée. Il faut donc bien comprendre les données que nous désirons présenter et faire preuve de jugement. Dans cette exemple, la proportion d’hommes et de femmes qui ont voté et qui se sont abstenu est tellement similaire que les deux bandes sont presque identiques.

# Graphique à bandes superposées (ou bandes divisées)

# Filtrer pour retirer les NAs
data = filter(base, !is.na(sexe) & !is.na(a_vote))

graph_sexe_vote = ggplot() +
  geom_bar(data = data,
           mapping = aes(x = sexe,
                         fill = a_vote),
           position = "fill",
           color = "black") +
  scale_fill_brewer(palette = "Greens") +
  scale_y_continuous(breaks = seq(0, 1, .1),
                     expand = expansion(mult = c(0, .05)),
                     label = percent) +
  labs(title = "Croisement entre deux variables qualitatives (sexe et vote)",
       x = "Sexe",
       y = "Proportion",
       fill = "Vote") +
  theme_defaut(couleur = "#018849",
               grille = "h",
               grille_top = FALSE)

graph_sexe_vote

Une variable qualitative et une quantitative

Variable qualitative dichotomique ([1,0];[“Oui”,“Non”])

Recodage

Dans cet exemple, nous utiliserons les variables “sex.r” et “income” pour vérifier s’il y a un lien entre le sexe et le revenu.

Avant de croiser ces deux variables, on se doit de vérifier leurs valeurs afin de voir s’il faut procéder à un recodage. On peut vérifier leurs valeurs selon les méthodes présentées à la section « Analyse univariée ».

*Pour cet exemple, nous avons circonsrit la variable de revenu aux personnes qui gagnent entre 5000$ et 250000$ afin de retirer les valeurs absurdes de l’échantillon. Cette manipulation permet une meilleure présentation visuelle des données, mais il faut garder en tête qu’elle représente un énorme raccourci méthodologique dans le cadre d’une recherche.

freq_sexe = SommaireQuali(base$sex.r, na.rm = FALSE)
## 
## Fréquences des valeurs de la variables :
## 
##         n    % val%
## 1    3635 48.0 48.2
## 2    3883 51.3 51.5
## 3      16  0.2  0.2
## 1000    6  0.1  0.1
## NA     32  0.4   NA
## 
## [1] Mode : 2
freq_revenu = SommaireQuanti(base$income, na.rm = TRUE)
## 
## [1] Moyenne : 66234.21 
## [1] Ecart-type : 67207.38    
## 
## [1] Minimum (0%) : 1000          
## [1] Premier quartile (25%) : 30000                   
## [1] Mediane (50%) : 52000          
## [1] Dernier quartile (75%) : 82000                   
## [1] Maximum (100%) : 1000000
base$sexe = recode(base$sex.r, '1="Homme" ; 2="Femme" ; else=NA')
base$revenu = base$income
base$revenu[base$revenu <= 5000 | base$revenu >= 250000] = NA

Après ces manipulation, la variable “revenu” est continue entre 5000 et 250000, alors que la variable “sexe” prend les valeurs “Homme” ou “Femme”.

Significativité et taille de l’effet

Lorsque la variable qualitative est dichotomique, il faut utiliser le D de Cohen pour mesurer la différence entre les deux valeurs possible de la variable indépendante (X).

La fonction QualiQuanti() du package personnalisé permet de calculer la valeur du p, la valeur du D de Cohen et de présenter un tableau qui montre la moyenne de la variable dépendante (Y) pour chaque groupe (valeurs possibles de la VI).

La fonction renvoie une liste qui contient la valeur du p et le D de Cohen. Cette liste peut être sauvegardé dans un nouvelle objet et on peut ensuite accéder aux deux valeurs à l’aide du signe de dollar ($).

p_D_sexe_revenu = QualiQuanti(base$sexe, base$revenu)
## 
## Tableau des moyennes de chaque groupe : 
##         Femme    Homme
## [1,] 58972.38 64628.49
## 
## [1] Valeur du p : 0.00000169381487251313
## 
## [1] Le croisement entre la variable « sexe » et la variable « revenu » est statistiquement significatif.
## 
## [1] D de Cohen : 0.1402
## 
## [1] La force de la relation entre la variable « sexe » et la variable « revenu » est triviale puisque le D de Cohen inférieur à 0.2.
p = p_D_sexe_revenu$p_value
p
## [1] 0.000001693815
D = p_D_sexe_revenu$D_Cohen
D
## [1] 0.1402

Présentation visuelle

Pour visualiser la différence entre les moyennes de plusieurs groupes distincts, on peut utiliser un graphique en violon ou un graphique en boîte à moustache.

Le graphique en violon permet d’observer la densité d’observation sur l’échelle continue de la variable dépendante pour chaque groupe, alors que le graphique en boîte à moustache montre principalement l’emplacement de la médiane (trait le plus au centre) et des quartiles inférieur et supérieur à celle-ci (ceux qui coupent l’échantillon à 25% et 75%). Ces deux mesures sont représentées par les bornes inférieures et supérieure de la “boîte” du graphique en boîte à moustache.

Il est possible de faire apparaître un seul graphique qui présente les deux de manière superposée avec le bloc de code suivant.

# Graphique en violons + boîtes à moustaches
data = filter(base, !is.na(sexe) & !is.na(revenu))

violin_box = ggplot() +
  geom_violin(data = data,
              mapping = aes(x = sexe, y = revenu),
              fill = "#018849",
              color = "black") +
  geom_boxplot(data = data,
               aes(x = sexe, y = revenu),
               width = 0.2,
               notch = TRUE,
               fill = "#01FA85",
               outlier.color = "#01FA85",
               outlier.size = 2) +
  scale_y_continuous(breaks = seq(0,350000,25000),
                     expand = expansion(mult = c(0, .05)),
                     labels = dollar_format()) +
  labs(title = "Croisement entre une variable qualitative et une quantitative",
       x = "Sexe",
       y = "Salaire annuel") +
  theme_defaut(couleur = "#018849",
               grille = "h",
               grille_top = TRUE)

violin_box

Variable qualitative polytomique non-ordonnée (“Jaune”,“Bleu”,“Rouge”, etc.)

Variable qualitative polytomique ordonnée (“Élevé”,“Moyen”,“Faible”, etc.)

Deux variables quantitatives